package org.example.day01;

import java.util.ArrayList;
import java.util.List;

/**
 * @author zlxad
 * @version 1.0
 * @description: TODO
 * 题目描述：
 * 中秋节，公司分月饼，m个员工，买了n个月饼，m<=n，每个员工至少分1个月饼，但可以分多个，单人分到最多月饼的个数是Max1，
 * 单人分到第二多月饼个数是Max2，Max1-Max2 <= 3，单人分到第n-1多月饼个数是Max(n-1)，
 * 单人分到第n多月饼个数是Max(n)，Max(n-1) – Max(n) <= 3, 问有多少种分月饼的方法？
 * @date 2024/3/11 15:22
 */
public class test010 {
    static List<Integer> vec = new ArrayList<>();

    public static int dispatch(int nPeople, int nMoon, int nMin) {
        if (nMoon <= 0) {
            return 0; // 分配失败
        }

        if (nPeople <= 0) {
            return 0;
        }
        if (nPeople == 1) { //处理人数为2的情况
            if (nMoon >= nMin && nMoon <= nMin + 3) {
                vec.add(nMoon);
                System.out.print("nMoon = " + nMoon + "\n");
                for (int x : vec) {
                    System.out.printf("%d ", x + 1);
                }
                System.out.print("\n");
                vec.remove(vec.size() - 1);
                return 1;
            }
            return 0;
        }

        int nCount = 0;
        for (int got = nMin; got <= nMin + 3; got++) {
            vec.add(got);
            System.out.print("dispatch: " + (nPeople - 1) + " " + (nMoon - got) + " " + got + "\n");
            nCount += dispatch(nPeople - 1, nMoon - got, got);//递归处理人数大于2的情况
            vec.remove(vec.size() - 1);
        }
        System.out.print("return\n");
        return nCount;
    }

    public static void main(String[] args) {
        dispatch(3, 10, 0);
    }
}

